//
//  DXOAuthViewModel.swift
//  新浪微博
//
//  Created by dix on 2017/2/4.
//  Copyright © 2017年 dix. All rights reserved.
//

import UIKit
/*
    - 帮助OAuthVC 请求数据
    - 帮助OAuthVC 保存用户模型和提供数据给其他控制器
 
 */
class DXOAuthViewModel: NSObject {
    //全局访问点
    static let shared : DXOAuthViewModel = DXOAuthViewModel()
    //路径
    let file = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last! as NSString).appendingPathComponent("userAccount.archiver")
    //个人信息对象(解决频繁访问沙盒的弊端)
    var userAccountModel : DXUserAccountModel?
    //访问令牌(计算型属性)
    var accessToken : String?{
//        if userAccountModel == nil {
//            return nil
//        }else{
//            //不是第一次登陆 已经保存过数据
//            //但是判断是否过期
//            if userAccountModel?.expires_Date?.compare(Date()) == ComparisonResult.orderedDescending {
//                return userAccountModel?.access_token
//            }else{
//                //已经过期
//                return nil
//            }
//        }
        //不是第一次登陆 已经保存过数据
        //但是判断是否过期
        if userAccountModel?.expires_Date?.compare(Date()) == ComparisonResult.orderedDescending {
            return userAccountModel?.access_token
        }else{
            //已经过期
            return nil
        }
    
    }
    //判断用户是否登陆
    /*
        - 如果accessToken有值 就代表登陆 反之没有登陆
     */
    var isLogin : Bool {
//        if accessToken != nil {
//            return true
//        }else{
//            return false
//        }
        return accessToken != nil
    
    }
    //重写init方法
    override init(){
        super.init()
        //给userAccountModel赋值
        userAccountModel = getUserAccountModel()
    }
}
//OAuthVC 保存用户模型和提供数据给其他控制器
extension DXOAuthViewModel{
    //保存模型
    func saveUserAcountModel(userAccountModel : DXUserAccountModel){
        self.userAccountModel = userAccountModel
        
        //保存
        NSKeyedArchiver.archiveRootObject(userAccountModel, toFile: file)
        
    }
    //获取模型
    func getUserAccountModel() -> DXUserAccountModel?{

        //获取
        let userAccountModel = NSKeyedUnarchiver.unarchiveObject(withFile: file) as? DXUserAccountModel
        return userAccountModel
        
    }


}
//OAuthVC 请求数据
extension DXOAuthViewModel{
    //请求获取accessToken
    func getUserAccount(code : String, isFinish:@escaping (Bool)->()){
        DXNetworkTools.shared.loadUserAccount(code: code, success: { (response)->() in
            //判断response是否为nil 而且是否是一个字典
            guard let res = response as? [String : Any] else {
                //执行闭包
                isFinish(false)
                return
            }
            //字典转模型
            let userAccountModel = DXUserAccountModel.yy_model(withJSON: res)
            //判断是否为nil
            guard let u = userAccountModel else {
                //执行闭包
                isFinish(false)
                return
            }
            //请求个人信息数据
            self.getUserInfo(userAccountModel: u, isFinish: isFinish)
            
        }, failure: { (error)->() in
            //执行闭包
            isFinish(false)
        })
        
    }
    
    // 获取用户信息
    func getUserInfo(userAccountModel : DXUserAccountModel, isFinish:@escaping (Bool)->()){
        
        DXNetworkTools.shared.loadUserInfo(userAccountModel: userAccountModel, success: {(response)->() in
            //判断response 是否为nil 且是否可以转成字典
            guard let res = response as? [String : Any] else{
                //执行闭包
                isFinish(false)
                return
            }
            //赋值
            userAccountModel.screen_name = res["screen_name"] as? String
            userAccountModel.avatar_large = res["avatar_large"] as? String
            //保存用户模型
            self.saveUserAcountModel(userAccountModel: userAccountModel)
            //最后到底成功了
            isFinish(true)
            
        }, failure: { (error)->() in
            //执行闭包
            isFinish(false)
        })
        
    }
}
